package com.boss.salary.dao;

import com.boss.framework.dto.PaginationDTO;
import com.boss.framework.exception.AppRuntimeException;
import com.boss.salary.entity.SalaryBankPayBack;
import com.boss.salary.vo.Offer;

import java.util.List;
import java.util.Map;

public interface ISalaryBankPayBackDao {

    /**
     * 获取银行支付回盘表失败的数据分页
     * @param queryParam
     * @return
     */
    List<SalaryBankPayBack>  querySalaryBankPayBackPage( Map<String, Object> queryParam,List<String> childrenId);

    /**
     * 获取银行支付回盘表失败的数据一级
     * @param paginationDTO
     * @param queryParam
     * @return
     */
    List<SalaryBankPayBack>  querySalaryBankPayBackTotal(PaginationDTO paginationDTO, Map<String, Object> queryParam,List<String> childrenId);

    /**
     * 获取银行支付回盘表失败的数据总数
     * @return
     */
    int querySalaryBankPayBackTotal(Map<String, Object> queryParam);

    /**
     * 修改银行支付回盘表数据
     * @param salaryBankPayBack
     */
    void updateSalaryBankPayBack(SalaryBankPayBack salaryBankPayBack);

    /**
     * 分发到单位
     */
    void sendCardNoToAgency(List<String> agencyIds);

    /**
     * 重新下发
     * @param agencyIds
     */
    void cancelSendCard(List<String> agencyIds);
    /**
     * 获取银行支付回盘表失败并且分发后的数据分页
     * @param paginationDTO
     * @param queryParam
     * @return
     */
    List<SalaryBankPayBack>  querySalaryBankPayBackSendPage(PaginationDTO paginationDTO, Map<String, Object> queryParam);

    /**
     * 获取银行支付回盘表失败并且分发后的数据总数
     * @return
     */
    int querySalaryBankPayBackSendTotal(Map<String, Object> queryParam);

    /**
     * 撤销修改
     * @param salaryBankPayBack
     */
    void revokeUpdate(SalaryBankPayBack salaryBankPayBack);

    /**
     * 获取未修改账户的人数
     * @param agencyId
     * @return
     */
    int getNotUpdateTotal(String agencyId);

    /**
     * 根据单位id更新机构内部审核状态
     *
     * @param salaryBankPayBack
     */
    void updateVerifyByAgencyId(SalaryBankPayBack salaryBankPayBack);

    /**
     * 送财政审核
     * @param salaryBankPayBack
     */
    void sendVerifyFinance(SalaryBankPayBack salaryBankPayBack);

    /**
     * 撤销送审
     * @param salaryBankPayBack
     */
    void revokeVerifyFinance(SalaryBankPayBack salaryBankPayBack);

    /**
     * 获取单位的财政审核状态
     * @param agencyIds
     * @return
     */
    List<SalaryBankPayBack> getAgencyVerifyState(List<String> agencyIds);

    /**
     * 获取财政审核卡号的数据分页
     * @param queryParam
     * @return
     */
    List<SalaryBankPayBack>  queryFinanceVerifyPage( Map<String, Object> queryParam,List<String> childrenId);

    /**
     * 获取财政审核卡号的数据分页一级
     * @param paginationDTO
     * @param queryParam
     * @return
     */
    List<SalaryBankPayBack>  queryFinanceVerifyTotal(PaginationDTO paginationDTO, Map<String, Object> queryParam,List<String> childrenId);

    /**
     * 财政审核卡 号财政确认
     * @param salaryBankPayBack
     */
   void financeVerifyConfirm(SalaryBankPayBack salaryBankPayBack);

    /**
     * 财政审核卡号 财政退回
     * @param salaryBankPayBack
     */
    void financeVerifySendBack(SalaryBankPayBack salaryBankPayBack);

    /**
     * 财政审核卡号 取消确认
     * @param salaryBankPayBack
     */
    void financeVerifyCancelConfirm(SalaryBankPayBack salaryBankPayBack);

    /**
     * 财政审核卡号 审核通过
     * @param salaryBankPayBack
     */
    void financeVerifyAuditPass(SalaryBankPayBack salaryBankPayBack);

    /**
     * 财政审核卡号 撤销审核
     * @param salaryBankPayBack
     */
    void financeVerifyUndoAudit(SalaryBankPayBack salaryBankPayBack);

    /**
     * 卡号财政处理 分页查询所有
     * @param paginationDTO
     * @param queryParam
     * @return
     */
    List<SalaryBankPayBack> queryCardNumberFiscalPage(PaginationDTO paginationDTO, Map<String, Object> queryParam,List<String> childrenId);

    /**
     * 卡号财政处理 获取总数
     * @param queryParam
     * @return
     */
    int getCardNumberFiscalNum(Map<String, Object> queryParam, List<String> childrenId);

    /**
     * 查询应发、实发合计金额
     * @param queryParam
     * @return
     */
    SalaryBankPayBack getCardNumberFiscalCombined(Map<String, Object> queryParam,List<String> childrenId);

    /**
     * 查询银行卡长期使用数据
     * @return
     */
    List<SalaryBankPayBack> getisLongUse();

    /**
     * 更新人事信息
     * @param salaryBankPayBack
     */
    void updateIsLongUse(SalaryBankPayBack salaryBankPayBack);

    /**
     * 撤销更新人事信息
     * @param salaryBankPayBack
     */
    void undoUpdateIsLongUse(SalaryBankPayBack salaryBankPayBack);

    /**
     * 查询可以生成数据的id和人员id
     * @return
     */
    List<Map<String, Object>> selectIdAndPersonIdByIsUpdate();

    /**
     * 查询可以生成数据的id和人员id(过滤不需要的)
     * @return
     */
    List<Map<String, Object>> selectIdAndPersonIdByIsUpdate(List<String> agencyIds);

    /**
     * 查询银行支付回盘表 所有状态为  bank_back_code='F' verified_in_agency_code=2 is_update=1
     * @return
     */
    List<SalaryBankPayBack> Abnormal();

    /**
     * 根据ids批量修改已经生成银行数据的异常卡号的状态
     * @param ids
     */
    void batchUpdateIsRecreateByIds(List<String> ids) throws AppRuntimeException;

    /**
     * 获取报盘汇总数据
     * @return
     */
    List<Offer> selectHZOffer(List<String> idenNos, String province);
    /**
     * 查询银行支付回盘表 所有状态为  bank_back_code='F' is_send = 1  verified_in_agency_code='0'
     * @return
     */
    List<SalaryBankPayBack> expCardNoSub();

    /**
     * 获取所有未回流数据
     * @param province
     * @return
     */
    List<SalaryBankPayBack> selectNotPushed(String province);

    /**
     * 修改是否回流状态
     * @param province
     */
    void updateIsPushed(String province);
}
